﻿using System;
using System.Data;
using DevExpress.XtraSpreadsheet;

namespace QL_Truong_Hoc.Export
{
    internal class clsDSThiTotNghiepSC
    {
        //Data table đầu vào cần có những trường sau:
        //khs_tenkhoas
        //Lop_ten
        //Lop_batdau
        //Lop_ketthuc
        //Lop_quyetdinh
        //Lop_quyetdinh_ngay
        //hs_hodem;            'họ đệm
        //hs_ten;              'tên
        //hs_ngaysinh;         'ngày sinh
        //hs_noisinh;          'nơi sinh
        //hs_gioitinh;         'giới tính
        //hs_hokhau;           'hộ khẩu
        //hs_uutien;           'đối tượng ưu tiên
        //hs_nguyenvongsaukhihoc;   'việc làm sau đào tạo
        //GhiChu;           'ghi chú

        private string mcstrTemplate = Environment.CurrentDirectory + @"\Templates\Mau 20.2_DS HS Kiem tra Ket thuc SC nghe TH.xls";

        public clsDSThiTotNghiepSC()
        {
        }

        /// <summary>
        /// Thực hiện xuất ra file excel.
        /// File template là file đã định sẵn.
        /// </summary>
        /// <param name="objData">Dữ liệu đưa vào file word</param>
        public bool fncExport(DataTable objData)
        {
            bool blnResult = false;

            try
            {
                //get data
                SpreadsheetControl objExcel = new SpreadsheetControl();
                objExcel.LoadDocument(mcstrTemplate);

                xExport(objExcel, objData, false);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }

        /// <summary>
        /// Thực hiện xuất ra file excel.
        /// </summary>
        /// <param name="SpreadsheetControl">excel word</param>
        /// <param name="objData">Dữ liệu đầu vào</param>
        /// <param name="blnShowMergedData">Có hiện dữ liệu đã xuất ngay trên control không?</param>
        /// <returns></returns>
        public bool fncExport(SpreadsheetControl objExcelControl, DataTable objData, bool blnShowMergedData = false)
        {
            bool blnResult = false;

            try
            {
                //get data
                return xExport(objExcelControl, objData, blnShowMergedData);
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }

        /// <summary>
        /// Phương thức cơ sở thực hiện mail merge
        /// </summary>
        /// <param name="objExcelControl">control excel</param>
        /// <param name="objData">dữ liệu vào</param>
        /// <param name="blnShowMergedData">có xem kết quả không?</param>
        /// <returns></returns>
        private bool xExport(SpreadsheetControl objExcelControl, DataTable objData, bool blnShowMergedData = false)
        {
            bool blnResult = false;

            try
            {
                if (objData == null) return false;

                if (!System.IO.File.Exists(mcstrTemplate))
                {
                    clsCommon.fncMsgWarning("Không tìm thấy tệp tin mẫu.");
                    return false;
                }

                objExcelControl.LoadDocument(mcstrTemplate);

                //header
                string strTenKhoas = "";
                string strTenLop = "";
                string strTenNghe = "";
                string strMonThi = "";
                int intTrinhDo = (int)clsEnum.TRINH_DO_DAO_TAO.CAO_DANG;

                DateTime dtLopBatDau = DateTime.MinValue;
                DateTime dtLopKetThuc = DateTime.MinValue;

                //export
                string strHoDem;
                string strTen;
                DateTime dtNgaySinh;
                
                int intCurrentRow = 12;
                int intCurrentCol = 0;

                //tạo n dong moi.
                if (objData.Rows.Count > 3)
                {
                    objExcelControl.ActiveWorksheet.Rows.Insert(14, objData.Rows.Count - 3);

                    //(12 + objData.Rows.Count - 2) -> bắt đầu tính từ dòng 12 + (Số bản ghi - 1 là 2 dòng đầu tiên bị nhảy qua + 1 dòng cuối ko copy format)
                    objExcelControl.ActiveWorksheet.Range["A15:J" + (14 + objData.Rows.Count - 3)].CopyFrom(objExcelControl.ActiveWorksheet.Range["A14:J14"]);
                }

                //lấy dòng đầu tiên fill header
                if (objData.Rows.Count > 0)
                {
                    strTenKhoas = clsCommon.fncCnvNullToString(objData.Rows[0]["khs_tenkhoas"]);
                    strTenLop = clsCommon.fncCnvNullToString(objData.Rows[0]["Lop_ten"]);
                    strTenNghe = clsCommon.fncCnvNullToString(objData.Rows[0]["ng_tennghe"]);
                    strMonThi = clsCommon.fncCnvNullToString(objData.Rows[0]["mtn_ten"]);
                    intTrinhDo = clsCommon.fncCnvNullToInt(objData.Rows[0]["TD_ID"]);

                    dtLopBatDau = clsCommon.fncCnvNullToDatetime(objData.Rows[0]["Lop_batdau"]);
                    dtLopKetThuc = clsCommon.fncCnvNullToDatetime(objData.Rows[0]["Lop_ketthuc"]);
                }

                switch ((clsEnum.TRINH_DO_DAO_TAO)intTrinhDo)
                { 
                    case clsEnum.TRINH_DO_DAO_TAO.CAO_DANG:
                        objExcelControl.ActiveWorksheet.Cells["A3"].Value = "HỘI ĐỒNG KTKTKH CAO ĐẲNG NGHỀ";
                        objExcelControl.ActiveWorksheet.Cells["A6"].Value = string.Format("CAO ĐẲNG NGHỀ KHOÁ {0}", strTenKhoas.ToUpper());
                        break;
                    case clsEnum.TRINH_DO_DAO_TAO.TRUNG_CAP:
                        objExcelControl.ActiveWorksheet.Cells["A3"].Value = "HỘI ĐỒNG KTKTKH TRUNG CẤP NGHỀ";
                        objExcelControl.ActiveWorksheet.Cells["A6"].Value = string.Format("TRUNG CẤP NGHỀ KHOÁ {0}", strTenKhoas.ToUpper());
                        break;
                    case clsEnum.TRINH_DO_DAO_TAO.SO_CAP:
                        objExcelControl.ActiveWorksheet.Cells["A3"].Value = "HỘI ĐỒNG KTKTKH SƠ CẤP NGHỀ";
                        objExcelControl.ActiveWorksheet.Cells["A6"].Value = string.Format("SƠ CẤP NGHỀ KHOÁ {0}", strTenKhoas.ToUpper());
                        break;
                }

                objExcelControl.ActiveWorksheet.Cells["A7"].Value = string.Format("Nghề: {0}; Lớp: {1}", clsCommon.fncCapitalizeFirst(strTenNghe), clsCommon.fncCapitalizeFirst(strTenLop));
                objExcelControl.ActiveWorksheet.Cells["A8"].Value = string.Format("Thời gian đào tạo: {0} tháng (từ ngày {1} đến ngày {2})", clsCommon.fncMonthDifference(dtLopBatDau, dtLopKetThuc), dtLopBatDau.ToString("dd/MM/yyyy"), dtLopKetThuc.ToString("dd/MM/yyyy"));
                objExcelControl.ActiveWorksheet.Cells["A9"].Value = clsCommon.fncCapitalizeFirst(strMonThi);

                for (int i = 0; i <= objData.Rows.Count - 1; i++)
                {
                    //lay data
                    strHoDem = clsCommon.fncCnvNullToString(objData.Rows[i]["hs_hodem"]);
                    strTen = clsCommon.fncCnvNullToString(objData.Rows[i]["hs_ten"]);
                    dtNgaySinh = clsCommon.fncCnvNullToDatetime(objData.Rows[i]["hs_ngaysinh"]);

                    //set cell
                    intCurrentCol = 0; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = i + 1;
                    intCurrentCol++; //Ko dien SBD
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strHoDem;
                    intCurrentCol++; objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = strTen;
                    intCurrentCol++; if (dtNgaySinh > DateTime.MinValue) objExcelControl.ActiveWorksheet.Cells[intCurrentRow, intCurrentCol].Value = dtNgaySinh.ToString("dd/MM/yyyy");
                   
                    intCurrentRow++;
                }

                ////file to save
                //SaveFileDialog dlgSave = new SaveFileDialog();
                //dlgSave.Filter = "Excel (*.xls)|*.xls|All files (*.*)|*.*";
                //dlgSave.FilterIndex = 1;
                //dlgSave.RestoreDirectory = true;

                ////export word
                //objExcelControl.SaveDocument(dlgSave.FileName, DocumentFormat.Xls);

                return true;
            }
            catch (Exception ex) { clsCommon.fncMsgError(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name, System.Reflection.MethodBase.GetCurrentMethod().ToString(), ex.Message); }
            finally { }
            return blnResult;
        }
    }
}